const { log, timeEnd } = require("console")
const express = require("express")
const path = require("path")
//创建实例
const app = express()
const Users = [
    {
        username: "GG"
        , password: "123"
        , nikename: "GG"
    }
    , {
        username: "YY"
        , password: "123"
        , nikename: "YY"
    }
    , {
        username: "SS"
        , password: "123"
        , nikename: "SS"
    }
]
// 设置中间件,并且使用express框架的static方法,暴露一个文件夹给外部使用或者看到
// 目录设为本机当前JS目录项的绝对路径.下的public
// 防止到其他电脑后,我们无法使用该JS,导致各种资源无法加载等等/....
app.use(express.static(path.resolve(__dirname, "public")))
// 引入解析请求体的中间件
app.use(express.urlencoded())
// 设置其路由的路径,并且设置get请求的响应体是一段字符串.
app.get("/", (req, res) => {
    res.send("这是hello路由!!!!")
})


/* 
    设置一个路径来接受我们表单中的数据
*/
app.get("/login", (req, res) => {
    // 获取用户名和密码
    // req.query表示查询字符串中的请求参数

    /* 
    利用req.query.xxx来获取我们想要的参数
    验证密码是否正确
    */
    if (req.query.username === "GG" && req.query.password === "111") {
        res.send(`<h1>登录成功,你的用户名是 <h1>`)
    } else {
        res.send("<h1>登录失败<h1>")
    }
    console.log("已经接受到数据");
})
// post的login和get不一样,所以不会收影响.
// 但是post的请求不会自己解析请求体,需要在自己设置一个中间件来解析请求体



app.post("/reg", (reg, res) => {
    // 先利用结构数组来获取其我们获得的表单中的所有数据
    const { username, password, repwd, nikename } = reg.body

    // 再去过滤其数组中是否有相同的用户名和昵称 设置个变量获取对象值
    const regUesr = Users.find((item) => {
        item.username === username || item.nikename === username
    })
    // 判断,如果是Undefined则取反,值为true执行注入数组,反之返回字符串错误
    if (!regUesr) {
        Users.push(
            {
                username
                , password
                , nikename
            }
        )
        res.send(`<h1>注册成功<h1>`)

    }
    else {
        res.send("<h1>用户名或密码错误<h1>")
    }
})
app.post("/login", (req, res) => {


    // 先获取我们页面的表单中的数据
    const username = req.body.username
    const password = req.body.password

    // 然后我们使用数组的find过滤数组中有没有符合条件对象,再用一个值去接受结果,那么返回的是一个对象.
    const loginUser = Users.find((item) => {
        return item.username === username && item.password === password
    })
    // 利用其if的属性,会将值自动转换成true和false.用其判断去完成我们想要达到的效果
    if (loginUser) {
        res.send(`<h1>登录成功,你的用户名为 ${loginUser.nikename} <h1>`)

    }
    else {
        res.send("<h1>用户名或密码错误<h1>")
    }
    /*
        这种方法直接写死了,在开发中,我们应该使用扩展性更强的方法,比如引入一个数组
    // const username = req.body.username
    // const password = req.body.password
    if (username === "GG" && password === "111") {
        res.send("<h1>登录成功<h1>")
    } else {
        res.send("<h1>登录失败<h1>")
    }
    // console.log("已经接受到数据"); */
})

/* 
    安装一个nodemon,可以实现每当我修改代码,就可以自动重启服务器,不用那么麻烦
    就像网页一样的效果


    全局安装后
    nodemon 来启动
    或者通过输入nodemon xxx  //运行指定的js...


    开发依赖:
        npm i nodemon -D

    在项目中,全局中没有,启动方式
        npx nodemon
        npx nodemon 指定js文件

*/


//  监听3000端口号.并告诉我们的控制台一段字符串
app.listen(3000, () => {
    console.log("服务器已启动");
})